iT邦幫忙

2024 iThome 鐵人賽

DAY 11
0

此主題分享分成兩天來說明 ~

分享主軸

  • 常聽到的 "組態" 到底是什麼 ?
  • 組態順序 ?
  • 判斷不同環境下的組態

組態是什麼 ?

組態設定就是應用程式在運行時所需的各種設定值
這些設定值可以從多種來源取得,並且可以根據不同的環境或需求進行調整
( 這些來源也不是只能從 JSON 取得,今日分享中,其他來源就不多做說明 )

ASP.NET 與 ASP.NET Core

  • 在傳統的 ASP.NET Framework 時代,所有的組態設定都集中在 Web.Config,且該平台強烈依賴 IIS 作為其運行環境,幾乎所有配置都通過這一個文件管理

  • 隨著 ASP.NET Core 的誕生,做了大改變,組態來源可以多種。
    可以透過 appsettings.json、appsettings.{Environment}.json、環境變數、命令列參數 等等來靈活設定,並且由 IConfiguration 統一管理

組態來源優先順序

  • 優先級由高至低

命令列參數 > 系統環境變數 > 使用者密碼(僅在開發環境中)> appsettings.{Environment}.json > appsettings.json

預設組態應用程式設定順序

發佈後應用程式

1.預設環境是 Production

  • 如果沒有明確設定 ASPNETCORE_ENVIRONMENT 環境變數,ASP.NET Core 會預設為 Production 環境

2. 設定檔案的讀取順序

  • appsettings.json:這是主要的設定檔案,無論環境為何,這個檔案都會被讀取
  • appsettings.Production.json:如果 ASPNETCORE_ENVIRONMENT 設定為 Production,或者沒有設定 ASPNETCORE_ENVIRONMENT(預設為 Production),那麼應用程式會嘗試讀取appsettings.Production.json,如果這個檔案存在,則其設定會覆蓋 appsettings.json 中的對應設定

結論

  • 發佈後的應用程式會根據 ASPNETCORE_ENVIRONMENT 環境變數來決定使用哪個環境的設定檔案
  • 預設情況下,環境是 Production,所以應用程式會先讀取 appsettings.json,然後讀取 appsettings.Production.json(如果存在),並以 appsettings.Production.json 的設定為準
    如果 appsettings.Production.json 不存在,則只使用 appsettings.json 的設定

開發環境應用程式

launchSettings.json 的作用

  • 通常開發以專案內的launchSettings.json環境設定為主
  • 當在本地開發環境中使用 Visual Studio 或 dotnet run 命令來啟動應用程式時,launchSettings.json 會被讀取並應用
    launchSettings.json 中的 ASPNETCORE_ENVIRONMENT 變數會決定應用程式的開發執行環境
    例如,如果設定為 Development,那麼應用程式會以 Development 環境的設定來運行

結論

  • 本地開發環境中,launchSettings.json 通常 ASPNETCORE_ENVIRONMENT 預設設定為 Development,表示應用程式會使用 appsettings.json 和 appsettings.Development.json 的設定
  • 如果 launchSettings.json 存在,但沒有設定 ASPNETCORE_ENVIRONMENT,應用程式會依賴系統環境變數來決定執行環境,如果系統環境變數沒有設定,則預設為 Production 環境

開發環境中launchSettings.json

簡單說明 :

"profiles": {
    "http": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "applicationUrl": "http://localhost:port號",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "https": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "applicationUrl": "https://localhost:port號;http://localhost:port號",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "SampleEnvironment": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
  • 如果 commandName 設定為 IISExpress,那麼應用程式會使用 IIS Express 作為網頁伺服器
  • 如果 commandName 設定為 Project,那麼應用程式會使用 Kestrel 作為網頁伺服器,這是 ASP.NET Core 的內建伺服器
  • launchBrowser : 設定為 true,表示啟動應用程式時會自動開啟瀏覽器
  • applicationUrl : 表示應用程式在本地端的 URL
  • 如上可以看到,也可以自行增加其他設定檔,比如 SampleEnvironment,那就會在畫面看到多一個環境設定檔可以在開發階段去模擬執行
    https://ithelp.ithome.com.tw/upload/images/20240924/20133954ALPyJqCS23.png

簡單統整今日重點

  • 了解組態設定執行順序
  • 了解不同環境下,開發與部屬上對於組態的靈活運用
  • 簡單了解 launchSettings.json 內容

今日結語
明日會分享如何在 ASP .NET Core 應用程式中去設定這些組態

加油加油,繼續努力 ~

參考文章
https://learn.microsoft.com/zh-tw/aspnet/core/fundamentals/environments?view=aspnetcore-8.0&glarity_translate=1


上一篇
Day 10 DI:ASP.NET Core 中的核心設計模式,超重要!
下一篇
Day 12 組態 Configuration : 如何設定與取得 ?
系列文
靠近 ASP .NET Core 一點點27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言